package com.zjcloud.jwgl.service;

import java.util.List;
import com.zjcloud.jwgl.domain.AcScheduleConstraintTemplate;
import com.zjcloud.jwgl.domain.AcScheduleConstraint;

/**
 * 排课约束条件模板Service接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface IAcScheduleConstraintTemplateService 
{
    /**
     * 查询排课约束条件模板
     * 
     * @param id 排课约束条件模板主键
     * @return 排课约束条件模板
     */
    public AcScheduleConstraintTemplate selectAcScheduleConstraintTemplateById(Long id);

    /**
     * 查询排课约束条件模板列表
     * 
     * @param acScheduleConstraintTemplate 排课约束条件模板
     * @return 排课约束条件模板集合
     */
    public List<AcScheduleConstraintTemplate> selectAcScheduleConstraintTemplateList(AcScheduleConstraintTemplate acScheduleConstraintTemplate);

    /**
     * 新增排课约束条件模板
     * 
     * @param acScheduleConstraintTemplate 排课约束条件模板
     * @return 结果
     */
    public int insertAcScheduleConstraintTemplate(AcScheduleConstraintTemplate acScheduleConstraintTemplate);

    /**
     * 修改排课约束条件模板
     * 
     * @param acScheduleConstraintTemplate 排课约束条件模板
     * @return 结果
     */
    public int updateAcScheduleConstraintTemplate(AcScheduleConstraintTemplate acScheduleConstraintTemplate);

    /**
     * 批量删除排课约束条件模板
     * 
     * @param ids 需要删除的排课约束条件模板主键集合
     * @return 结果
     */
    public int deleteAcScheduleConstraintTemplateByIds(Long[] ids);

    /**
     * 删除排课约束条件模板信息
     * 
     * @param id 排课约束条件模板主键
     * @return 结果
     */
    public int deleteAcScheduleConstraintTemplateById(Long id);

    /**
     * 查询默认模板列表
     * 
     * @return 默认模板集合
     */
    public List<AcScheduleConstraintTemplate> selectDefaultTemplates();

    /**
     * 根据模板名称查询模板列表
     * 
     * @param templateName 模板名称
     * @return 模板信息列表
     */
    public List<AcScheduleConstraintTemplate> selectByTemplateName(String templateName);

    /**
     * 根据模板名称查询第一个模板（向后兼容）
     * 
     * @param templateName 模板名称
     * @return 模板信息
     */
    public AcScheduleConstraintTemplate selectFirstByTemplateName(String templateName);

    /**
     * 设置默认模板
     * 
     * @param id 模板ID
     * @return 结果
     */
    public int setDefaultTemplate(Long id);

    /**
     * 根据模板初始化约束条件数据
     * 
     * @param templateName 模板名称
     * @param semester 学期
     * @return 初始化的约束条件列表
     */
    public List<AcScheduleConstraint> initConstraintsBySemester(String templateName, String semester);

    /**
     * 应用默认模板到指定学期
     * 
     * @param semester 学期
     * @return 结果
     */
    public int applyDefaultTemplate(String semester);

    /**
     * 复制模板
     * 
     * @param sourceId 源模板ID
     * @param newTemplateName 新模板名称
     * @return 结果
     */
    public int copyTemplate(Long sourceId, String newTemplateName);

    /**
     * 根据模板名称初始化约束条件（修复版本）
     * 使用聚合服务确保模板完整性
     * 
     * @param templateName 模板名称
     * @param semester 学期
     * @return 初始化的约束条件列表
     * @throws com.zjcloud.jwgl.exception.TemplateValidationException 当模板验证失败时抛出异常
     */
    public List<AcScheduleConstraint> initFromTemplate(String templateName, String semester) throws com.zjcloud.jwgl.exception.TemplateValidationException;
}